WRAP_NON_TEMPLATE_CLASS("itk::IterateNeighborhoodOptimizer")

  SET(MANAGED_TYPE_TEMPLATE ${MANAGED_ITK_SOURCE_COMMON_PATH}/itkManagedSingleValuedNonLinearOptimizer_TYPE.cxx.in)

  BEGIN_MANAGED_PROPERTY("Maximize" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if the optimizer maximizes or minimizes the cost function.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetMaximize( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetMaximize();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("Minimize" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if the optimizer maximizes or minimizes the cost function.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetMinimize( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetMinimize();")
  END_MANAGED_PROPERTY()
  
  BEGIN_MANAGED_PROPERTY("FullyConnected" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set whether the nieghborhood is defined by face connectivity or by face+edge+vertex connectivity. Default is FullyConnected = true.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetFullyConnected( value );")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetFullyConnected();")
  END_MANAGED_PROPERTY()
  
  BEGIN_MANAGED_PROPERTY("NeighborhoodSize" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the nieghborhood size (in physical space). The default is [1.0,1.0] and MUST be specified for all 3-D images and 2-D images with non-unity spacing.")
    SET(MANAGED_PROPERTY_TYPE      "itkArray<double>^")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetNeighborhoodSize( itk::ManagedTypes::ToNativeArray<double>(value) );")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedArray<double>( m_PointerToNative->GetNeighborhoodSize() );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("CurrentValue" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the current value.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetCurrentValue();")
  END_MANAGED_PROPERTY()
  
  BEGIN_MANAGED_PROPERTY("CurrentIteration" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the current iteration number.")
    SET(MANAGED_PROPERTY_TYPE      "unsigned int")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetCurrentIteration();")
  END_MANAGED_PROPERTY()
  
  BEGIN_MANAGED_METHOD("StopOptimization")
    SET(MANAGED_METHOD_INTERFACE       OFF)
    SET(MANAGED_METHOD_SUMMARY         "Stop the optimization algorithm.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->StopOptimization( );")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_METHOD("ResumeOptimization")
    SET(MANAGED_METHOD_INTERFACE       OFF)
    SET(MANAGED_METHOD_SUMMARY         "Resume previously stopped optimization with current parameters.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->ResumeOptimization( );")
  END_MANAGED_METHOD()

END_WRAP_NON_TEMPLATE_CLASS()
